const Koa = require('./koa');
const app = new Koa();
const fs = require('fs')
// koa中不能使用定时器，因为koa并不会等待定时器执行完成去返回，而是主线程执行完毕后就直接返回内容
// koa中next前面必须要有 await 或者 return ，否则当前的中间件不会等待下一个执行完毕

// koa 会将所有的中间件组成一个大的promise
// 在koa中处理异步逻辑 需要全部包装成promoise来处理

let sleep = (n) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve();
        }, n)
    })
}

app.use(async (ctx,next)=>{
    console.log(new Date());
    await next(); /*当前路由匹配完成以后继续向下匹配*/
})
app.use(async (ctx,next)=>{
    console.log(new Date());
    await next(); /*当前路由匹配完成以后继续向下匹配*/
})
app.use((ctx) => {
    ctx.res.setHeader('Content-Type','application/json')
    ctx.body = fs.createReadStream('./package.json')
})

app.on('error', function (err) {
    console.log(err, 21)
})


app.listen(3000, function () {
    console.log('server start 3000')
});